package com.bdcom.nms.NmsCollect.task;

import java.util.List;

import org.apache.log4j.Logger;
import org.opengoss.snmphibernate.api.ISnmpSessionFactory;
import org.opengoss.snmphibernate.api.ISnmpTargetFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import com.bdcom.nms.NmsCollect.dao.ManagedObjectDao;
import com.bdcom.nms.NmsCollect.pojo.ManagedObject;

/**
 * 此抽象类定义为spring-task要调度的对象，调度时执行collect方法。
 * 
 * 此类作为所有调度方法的父类以便标准化不同任务。
 * 
 * @author Administrator
 *
 */
public abstract class AbstractCollectTask {
	
	static  Logger _log=Logger.getLogger(AbstractCollectTask.class);
	
	@Autowired
	protected ManagedObjectDao managedobjdao;
	
	@Autowired
	protected ThreadPoolTaskExecutor collectthreadpoll;
	
	/**
	 * type用于指定执行采集工作时所需要限制的设备类型。
	 * 
	 */
	protected String classname;
	
	/**
	 * session工厂类，子类中可用此对象创建snmpSession
	 */
	@Autowired
	protected  ISnmpSessionFactory sessionFactory;
	
	/**
	 * target工厂类，子类中可用此对象创建snmpTarget
	 */
	@Autowired
	protected  ISnmpTargetFactory targetFactory; 
	
	
	/**
	 * 定义此方法为调度任务执行方法
	 */
	public abstract void collect();



    public String getClassname() {
		return classname;
	}


	public void setClassname(String classname) {
		this.classname = classname;
	}



	/**
     * 通过设备类型返回设备列表
     * 
     * @return
     */
	public List<ManagedObject> findMoByType(){
		
		return managedobjdao.findByClassName(classname);
		
	}
	
}
